package acm.广度优先搜索;

import java.util.*;

public class B {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println(fun(sc.nextInt(),sc.nextInt()));
//        int n=1;
//        int k=999999;
//        System.out.println(fun(n, k));
//        System.out.println(bfs(n, k));
//        compare();
    }

//    public static void compare(){
//        int count=1000;
//        while (count-- > 0) {
//            int n= (int) (Math.random()*1000000+1);
//            int k= (int) (Math.random()*1000000+1);
//            int fun = fun(n, k);
//            int bfs = bfs(n, k);
//            if (fun!=bfs){
//                System.out.println("n:"+n+",k:"+k);
//                System.out.println("预期："+bfs);
//                System.out.println("实际："+fun);
//            }
//        }
//    }
    public static int fun(int s,int e){
        Queue<Integer> queue=new LinkedList<Integer>();
        int[] path=new int[1000000];    //记录走到该位置的最短时间,
        queue.add(s);
        path[s]=1;
        int[] directions=new int[3];    //三种尝试方式
        while (!queue.isEmpty()) {
            Integer curr = queue.poll();
            if (curr==e){
                break;
            }
            directions[0]=curr+1;
            directions[1]=curr-1;
            directions[2]=curr*2;
            for (int d : directions) {
                if (d>=0&&d<path.length&&path[d]==0){
                    path[d]=path[curr]+1;
                    queue.add(d);
                }
            }
        }
        return path[e]-1;
    }
//
//    public static int bfs(int n,int k) {
//        int cur,res;
//        int max_n = 1000000;
//        int[] closed = new int[max_n];
//        int[] d = new int[3];
//        Queue<Integer> open = new LinkedList<>();
//        Arrays.fill(closed, -1);
//        open.offer(n);
//        closed[n] = 0;
//
//        while (!open.isEmpty()) {
//            cur = open.poll();
//            if (cur == k) break;
//
//            d[0] = cur - 1;
//            d[1] = cur + 1;
//            d[2] = cur * 2;
//
//            for (int i = 0; i < 3; i++) {
//                if (d[i] >= 0 && d[i] < max_n && closed[d[i]] == -1) {
//                    open.offer(d[i]);
//                    closed[d[i]] = closed[cur] + 1;
//                }
//            }
//        }
//
//        res = closed[k];
//        return res;
//    }

}
